package com.wwy.arithmetic.suanfa;

/**
 * @author 王伟羽
 * @program: arithmetictest
 * @description: 快乐数算法
 * @create: 2024/07/04
 */

public class IsHappy {

    /**
     * 编写一个算法来判断一个数 n 是不是快乐数。
     * <p>
     * 「快乐数」 定义为：
     * <p>
     * 对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和。
     * 然后重复这个过程直到这个数变为 1，也可能是 无限循环 但始终变不到 1。
     * 如果这个过程 结果为 1，那么这个数就是快乐数。
     * 如果 n 是 快乐数 就返回 true ；不是，则返回 false 。
     * 示例 1：
     * <p>
     * 输入：n = 19
     * 输出：true
     * 解释：
     * 12 + 92 = 82
     * 82 + 22 = 68
     * 62 + 82 = 100
     * 12 + 02 + 02 = 1
     * 示例 2：
     * <p>
     * 输入：n = 2
     * 输出：false
     * 提示：
     * <p>
     * 1 <= n <= 231 - 1
     *
     * @param args
     */
    public static void main(String[] args) {

        int i = 1;
        boolean judge = judge(2, 1);
        System.out.println("judge = " + judge);
    }

    /**
     * 最笨的处理方式，无限循环找到符合条件的数值
     * @param n
     * @param i
     * @return
     */
    public static boolean judge(int n, int i) {
        if (i > 860) {
            return false;
        }
        String a = Integer.valueOf(n).toString();
        int sum = 0;
        if (a.length() == 1) {
            Integer integer = Integer.valueOf(a);
            sum = sum + (integer * integer);
        } else {
            for (int j = 0; j < a.length(); j++) {
                Integer integer = Integer.valueOf(a.substring(j, j + 1));
                sum = sum + (integer * integer);
            }
        }
        if (sum == 1) {
            return true;
        } else {
            i++;
            n = sum;
            boolean judge = judge(n, i);
            if (!judge) {
                return false;
            }
        }
        return true;
    }


}
